home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 422_02 / misc / textnum.c < prev    next >
C/C++ Source or Header  |  1994-03-20  |  2KB  |  75 lines

  1. /*
  2.  * Number to text translator.
  3.  *
  4.  * Compile command: cc textnum -fop
  5.  */
  6. #include <stdio.h>
  7.  
  8. /*
  9.  * Main program which processes all of its arguments, interpreting each
  10.  * one as a numeric value, and displaying that value as english text.
  11.  */
  12. main(argc, argv)
  13.     int argc;
  14.     char *argv[];
  15. {
  16.     int i;
  17.  
  18.     if(argc < 2)                /* No arguments given */
  19.         abort("\nUse: textnum <value*>\n");
  20.  
  21.     for(i=1; i < argc; ++i) {    /* Display all arguments */
  22.         textnum(atoi(argv[i]));
  23.         putc('\n', stdout); }
  24. }
  25.  
  26. /*
  27.  * Text tables and associated function to display an unsigned integer
  28.  * value as a string of words. Note the use of RECURSION to display
  29.  * the number of thousands and hundreds.
  30.  */
  31.  
  32. /* Function to display number as string */
  33. textnum(value)
  34.     unsigned value;
  35. {
  36.     static char *digits[] = {    /* Table of single digits and teens */
  37.         "Zero", "One", "Two", "Three", "Four", "Five", "Six",
  38.         "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve",
  39.         "Thirteen", "Fourteen", "Fifteen", "Sixteen",
  40.         "Seventeen", "Eighteen", "Nineteen" };
  41.     static char *tens[] = {        /* Table of tens prefix's */
  42.         "Ten", "Twenty", "Thirty", "Fourty", "Fifty",
  43.         "Sixty", "Seventy", "Eighty", "Ninety" };
  44.     char join_flag;
  45.  
  46.     join_flag = 0;
  47.  
  48.     if(value >= 1000) {                /* Display thousands */
  49.         textnum(value/1000);
  50.         fputs(" Thousand", stdout);
  51.         if(!(value %= 1000))
  52.             return;
  53.         join_flag = 1; }
  54.  
  55.     if(value >= 100) {                /* Display hundreds */
  56.         if(join_flag)
  57.             fputs(", ", stdout);
  58.         textnum(value/100);
  59.         fputs(" Hundred", stdout);
  60.         if(!(value %= 100))
  61.             return;
  62.         join_flag = 1; }
  63.  
  64.     if(join_flag)                    /* Separator if required */
  65.         fputs(" and ", stdout);
  66.  
  67.     if(value > 19) {                /* Display tens */
  68.         fputs(tens[(value/10)-1], stdout);
  69.         if(!(value %= 10))
  70.             return;
  71.         putc(' ', stdout); }
  72.  
  73.     fputs(digits[value], stdout);    /* Display digits */
  74. }
  75.